iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0
AI/ ML & Data

使用 jq 處理資料系列 第 15

Day15: keys 和 keys_unsorted

  • 分享至 

  • xImage
  •  

昨天我們應用 length 來計算陣列元素的數量,今天繼續學習新的 jq 函式吧。

對話中學習

師傅:今天我們來學習 keyskeys_unsorted

徒弟:好的,師傅。這兩個函式有什麼不同呢?

師傅keys 返回排序後的屬性名稱,keys_unsorted 返回未排序的屬性名稱。

徒弟:哦,聽起來很直觀。能給個例子嗎?

師傅:當然。看這個:

{"c": 3, "a": 1, "b": 2}

師傅:用 keys 會得到:

["a", "b", "c"]

師傅:而 keys_unsorted 可能會得到:

["c", "a", "b"]

徒弟:我明白了。那在實際上,我們應該如何選擇使用哪一個呢?

師傅:如果你需要一致的輸出順序,用 keys。如果順序不重要,用 keys_unsorted 可能更快。

徒弟:謝謝師傅。我會在實際使用中多加練習的。

師傅:很好。記住,理解這些細節對於高效處理 JSON 資料很重要。

師傅:我們試試用 keyskeys_unsorted 來處理TODO

徒弟:好的,讓我試試。首先是 keys

curl https://jsonplaceholder.typicode.com/todos/1 | jq 'keys'

徒弟:結果是:

["completed", "id", "title", "userId"]

徒弟:現在試試 keys_unsorted

curl https://jsonplaceholder.typicode.com/todos/1 | jq 'keys_unsorted'

徒弟:結果是:

["userId", "id", "title", "completed"]

師傅:很好。你注意到兩邊的差異了嗎?

徒弟:我看到了。keys 返回的是按字母順序排序的屬性名稱,而 keys_unsorted 返回的是原始順序的屬性名稱。

師傅:正確。這就是這兩個函式的主要區別。在處理大型 JSON 資料時,這個區別可能會影響效能。

徒弟:我明白了。謝謝師傅的指導!


keys 函式

內建函數 keys ,當給定一個物件時,會在陣列中傳回它的屬性名稱。以 TODO 為例:

https://ithelp.ithome.com.tw/upload/images/20240929/20078389HYS4QfiiFm.jpg

keys_unsorted 函式

相對於 keys 函式的就是 keys_unsorted,如果沒看到 keys_unsorted 或許還不會注意到 keys會「排序」物件屬性的名稱;而keys_unsorted顧名思義,就是不特別排序屬性名稱,直接按照給定的物件屬性順序,在陣列中傳回屬性名稱。下面兩張圖做對照:

keys 函式 keys_unsorted 函式
https://ithelp.ithome.com.tw/upload/images/20240929/2007838937QhKM4Sy4.jpg https://ithelp.ithome.com.tw/upload/images/20240929/20078389Q0zYWOCQog.jpg

結論

今天認識了這 keyskeys_unsorted 這兩個直覺又實用的函式,當我們呼叫一個 API,通常會想去看回傳的物件有哪些資料,這時候使用 keys 就能馬上看到物件的屬性名稱;然若想要按原物件屬性的排列順序顯示,用 keys_unsorted 就比較合適。感謝星期天仍然認真學習的自己~😊


上一篇
Day14: length 應用嘗試
下一篇
Day16: 練習用 jq 追颱風消息
系列文
使用 jq 處理資料30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言